#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
1.类必须继承 unittest.TestCase
2.每个测试方法必须 test* 格式或者使用默认的 runTest
3.可以使用 setUp 方法在各个测试用例间继承，如下例的 Widget 
        import unittest

        class SimpleWidgetTestCase(unittest.TestCase):
            def setUp(self):
                self.widget = Widget("The widget")

        class DefaultWidgetSizeTestCase(SimpleWidgetTestCase):
            def runTest(self):
                assert self.widget.size() == (50,50), 'incorrect default size'

        class WidgetResizeTestCase(SimpleWidgetTestCase):
            def runTest(self):
                self.widget.resize(100,150)
                assert self.widget.size() == (100,150), \
                       'wrong size after resize'
4.可以使用 tearDown 方法完成 runTest 运行之后的清理工作。
如果 setUp 执行成功， 那么无论runTest 是否成功，tearDown 方法都将被执行
        import unittest

        class SimpleWidgetTestCase(unittest.TestCase):
            def setUp(self):
                self.widget = Widget("The widget")
            def tearDown(self):
                self.widget.dispose()
                self.widget = None
5.上边3.也可以沿用 JUnit 风格写法
        import unittest

        class WidgetTestCase(unittest.TestCase):
            def setUp(self):
                self.widget = Widget("The widget")
            def tearDown(self):
                self.widget.dispose()
                self.widget = None
            def testDefaultSize(self):
                assert self.widget.size() == (50,50), 'incorrect default size'
            def testResize(self):
                self.widget.resize(100,150)
                assert self.widget.size() == (100,150), \
                       'wrong size after resize'

'''

__author__ = 'lyj'


import unittest
from mytestcase import MyTestCase


def suite():
    '''
    聚合测试用例:
    也可以写成
class MyTestSuite(unittest.TestCase):
    def __init__(self):
        unittest.TestSuite.__init__(self, map(MyTestCase, ('test_aaa', 'test_bbb')))
    '''
    # 默认全部 test* 作为 suite
    #return unittest.makeSuite(MyTestCase, 'test')
    suite = unittest.TestSuite()
    suite.addTest(MyTestCase("test_bbb"))
    #suite.addTest(MyTestCase("test_aaa"))
    return suite

def nest():
    '''
    嵌套测试用例
    '''
    # module* 为多个 unittest 文件
    # 可以理解为一次运行多个 unittest 测试
    from mytestcase import MyTestCase as module1
    from mytestcase import MyTestCase as module2
    suite1 = module1.TheTestSuite()
    suite2 = module2.TheTestSuite()
    alltests = unittest.TestSuite((suite1, suite2))
    



if __name__ == '__main__':
    # 从命令行运行测试
    #unittest.main()
    
    # 将测试用命聚合成测试套件
    unittest.main(defaultTest='suite')

    # 交互式运行测试
    #runner = unittest.TextTestRunner()
    #runner.run(MyTestCase)

    # 嵌套测试用例
    #nest()
    print 'End.'